package com.heima.leetcode.datastructure.stack;

import com.heima.datastructure.stack.ArrayStack;

/**
 * <h3>用两个栈模拟一个队列 232</h3>
 *
 * @author 勾新杰
 * @version 1.0
 * @date 2024/9/1 19:56
 */
public class SimulateQueueWithTwoStack {
    // stack1用来当队头，stack2用来当队尾，
    // 1、当push的时候，往stack2里面压入元素
    // 2、当pop的时候，
    //   （1）如果stack1是空的，那么把stack2的元素全部依次弹出、压入stack1，再弹出stack1的栈顶元素
    //   （2）如果stack1非空，弹出栈顶元素即可
    // 其余不做赘述
    ArrayStack<Integer> stack1 = new ArrayStack<>(100); // 题目限制最多可能压入100次
    ArrayStack<Integer> stack2 = new ArrayStack<>(100);

    // offer
    public void push(int x) {
        stack2.push(x);
    }

    // poll
    public int pop() {
        if (stack1.isEmpty()){
            while (!stack2.isEmpty()){
                stack1.push(stack2.pop());
            }
        }
        return stack1.pop();
    }

    public int peek() {
        if (stack1.isEmpty()){
            while (!stack2.isEmpty()){
                stack1.push(stack2.pop());
            }
        }
        return stack1.peek();
    }

    public boolean empty() {
        return stack1.isEmpty() && stack2.isEmpty();
    }
}
